//package org.ytor.core.sqlflow.config;
//
//import jakarta.annotation.PostConstruct;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.beans.BeansException;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.config.BeanPostProcessor;
//import org.springframework.stereotype.Component;
//import org.ytor.common.classmeta.ClassMetadata;
//import org.ytor.common.exception.BaseException;
//import org.ytor.common.util.Strs;
//import org.ytor.common.util.cache.ClassCache;
//import org.ytor.core.sqlflow.BaseRepository;
//import org.ytor.core.sqlflow.anno.Table;
//import org.ytor.core.sqlflow.executor.SqlExecutor;
//import org.ytor.core.sysapi.codegen.model.TableMeta;
//import org.ytor.core.sysapi.codegen.service.IMetaService;
//
//import java.sql.SQLException;
//import java.util.List;
//import java.util.Map;
//import java.util.function.Function;
//import java.util.stream.Collectors;
//
///**
// * created by yangtong on 2025/8/14 23:23:55
// * <br/>
// */
//@Component
//@Slf4j
//public class RepositoryTableInitializer implements BeanPostProcessor {
//
//    private IMetaService metaService;
//
//    private SqlExecutor sqlExecutor;
//
//    private Map<String, TableMeta> tableMetaMap;
//
//    @PostConstruct
//    public void init() {
//        try {
//            // 查询所有表
//            List<TableMeta> tables = metaService.listTables("ytor", null, null);
//            tableMetaMap = tables.stream().collect(Collectors.toMap(TableMeta::getTable, Function.identity()));
//        } catch (SQLException e) {
//            throw new BaseException(e);
//        }
//    }
//
//    @Override
//    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
//        if (bean instanceof BaseRepository<?>) {
//            Class<?> modelType = ((BaseRepository<?>) bean).modelType();
//            ClassMetadata<?> classMetadata = ClassCache.get(modelType);
//
//            String tableName;
//            Table tableAnno = classMetadata.getAnnotation(Table.class);
//            // 使用类型名称作为表名称
//            if (tableAnno == null || Strs.isEmpty(tableAnno.value())) {
//                tableName = Strs.toUnderline(modelType.getSimpleName());
//            }
//            // 使用注解指定的表名称
//            else {
//                tableName = tableAnno.value();
//            }
//
//            TableMeta tableMeta = tableMetaMap.get(tableName);
//            if (tableMeta == null) {
//                // 新增表
//                log.info("表:[{}]不存在，即将新增", tableName);
//
//                String createTableSql = parseTableCreateSql(modelType);
//                sqlExecutor.doDDL(createTableSql, null);
//            }
//
//        }
//        return bean;
//    }
//
//    /**
//     * 解析类型，产生create sql
//     * @param modelType 实体类型
//     * @return create sql
//     */
//    public String parseTableCreateSql(Class<?> modelType) {
//        return null;
//    }
//
//}
